package org.hfy.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 外发加工实体类
 * 
 * @author hfy
 * @version 1.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("outsourcing")
public class Outsourcing extends BaseEntity {

    /**
     * 外发单号
     */
    @Size(max = 50, message = "外发单号长度不能超过50个字符")
    @TableField("outsourcing_no")
    private String outsourcingNo;

    /**
     * 报价单ID
     */
    @TableField("quotation_id")
    private Long quotationId;

    /**
     * 报价单号 (非数据库字段，用于列表显示)
     */
    @TableField(exist = false)
    private String quotationNo;

    /**
     * 报价明细ID
     */
    @TableField("quotation_item_id")
    private Long quotationItemId;

    /**
     * 供应商代码
     */
    @NotBlank(message = "供应商代码不能为空")
    @Size(max = 50, message = "供应商代码长度不能超过50个字符")
    @TableField("supplier_code")
    private String supplierCode;

    /**
     * 供应商名称
     */
    @NotBlank(message = "供应商名称不能为空")
    @Size(max = 100, message = "供应商名称长度不能超过100个字符")
    @TableField("supplier_name")
    private String supplierName;

    /**
     * 物料编码
     */
    @Size(max = 50, message = "物料编码长度不能超过50个字符")
    @TableField("material_code")
    private String materialCode;

    /**
     * 产品名称
     */
    @NotBlank(message = "产品名称不能为空")
    @Size(max = 100, message = "产品名称长度不能超过100个字符")
    @TableField("product_name")
    private String productName;

    /**
     * 外发数量
     */
    @NotNull(message = "外发数量不能为空")
    @TableField("quantity")
    private Integer quantity;

    /**
     * 外发单价
     */
    @TableField("unit_price")
    private BigDecimal unitPrice;

    /**
     * 外发总金额
     */
    @TableField("total_amount")
    private BigDecimal totalAmount;

    /**
     * 外发日期
     */
    @NotNull(message = "外发日期不能为空")
    @TableField("outsourcing_date")
    private LocalDate outsourcingDate;

    /**
     * 预计回厂日期
     */
    @TableField("expected_return_date")
    private LocalDate expectedReturnDate;

    /**
     * 实际回厂日期
     */
    @TableField("actual_return_date")
    private LocalDate actualReturnDate;

    /**
     * 状态
     */
    @TableField("status")
    private String status;

    /**
     * 备注
     */
    @TableField("remark")
    private String remark;

    /**
     * 创建人
     */
    @Size(max = 50, message = "创建人长度不能超过50个字符")
    @TableField("created_by")
    private String createdBy;

    /**
     * 报价单信息 (非数据库字段)
     */
    @TableField(exist = false)
    private Quotation quotation;

    /**
     * 报价明细信息 (非数据库字段)
     */
    @TableField(exist = false)
    private QuotationItem quotationItem;
} 